﻿using System;
using System.Data;
using System.Data.Odbc;

namespace cit.CopyDetection.DatabaseAccess
{
    /// <summary>
    /// Lớp chứa những hàm dùng chung cho việc truy cập CSDL
    /// </summary>
    public abstract class ObjectDataAccess
    {
        private static string _connectionString = ConfigReader.ConnectionString;

        /// <summary>
        /// Lấy đối tượng kết nối CSDL với chuỗi kết nối mặc định
        /// </summary>
        /// <returns>Đối tượng OdbcConnection</returns>
        protected static OdbcConnection GetOdbcConnection()
        {
            OdbcConnection connection = new OdbcConnection(_connectionString);
            return connection;
        }

        /// <summary>
        /// Tạo đối tượng command để thực thi lệnh SQL
        /// </summary>
        /// <param name="queryString">Lệnh SQL</param>
        /// <param name="parameters">Tham số cho câu lệnh</param>
        /// <param name="connection">Đối tượng Connection cho câu lệnh</param>
        /// <returns>Đối tượng OdbcCommand</returns>
        protected static OdbcCommand CreateOdbcCommand(string commandString, OdbcParameter[] parameters, OdbcConnection connection)
        {
            OdbcCommand command = new OdbcCommand(commandString, connection);            
            if (parameters != null)
            {
                foreach (OdbcParameter param in parameters)
                {
                    command.Parameters.Add(param);
                }
            }

            return command;
        }

        /// <summary>
        /// Thực thi một câu lệnh SQL không truy vấn
        /// </summary>
        /// <param name="commandString">Lệnh SQL cần thực thi</param>
        /// <param name="parameters">Tham số cho câu lệnh</param>
        /// <param name="connection">Đối tượng Connection cho câu lệnh</param>
        /// <returns>Số dòng bị tác động bởi câu lệnh</returns>
        protected static int OdbcExecuteNonQuery(string commandString, OdbcParameter[] parameters, OdbcConnection connection)
        {
            int rowsAffected = -1;

            OdbcCommand command = new OdbcCommand(commandString, connection);
            if (parameters != null)
            {
                foreach (OdbcParameter param in parameters)
                {
                    command.Parameters.Add(param);
                }
            }
            connection.Open();
            rowsAffected = command.ExecuteNonQuery();
            connection.Close();

            return rowsAffected;
        }
    }
}
